package xyz.blushyes.controller;

import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import xyz.blushyes.service.CacheTestService;

/**
 * 缓存穿透是什么？
 * 客户端向服务端发送了一个数据库和redis中根本不存在的数据导致每次都要访问数据库
 * 怎么解决缓存穿透？
 * 1. 缓存null对象，就算mysql没有我也给你缓存
 * 缺点：1.会导致浪费redis内存 2. 可能存在短期缓存不一致（修改合适TTL时间，修改时主动修改redis缓存）
 * 2. 布隆过滤器
 * 缺点：1.实现相对复杂 2.可能存在误判
 */
@RestController
@RequiredArgsConstructor
public class PierceCacheController {

    private final CacheTestService cacheTestService;

    @GetMapping("/notCache")
    public String notCache(@RequestParam Integer number) {
        return "The id is: " + cacheTestService.notCache(number);
    }

    @GetMapping("/cacheNullObject")
    public String pierceCache(@RequestParam Integer number) {
        return "The id is: " + cacheTestService.cacheNullObject(number);
    }

}
